In [1]:
#Import important libraries
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import plotly.express as px
%pip install yfinance
import yfinance as yf
Requirement already satisfied: yfinance in c:\users\basuc\anaconda3\lib\site-packages (0.2.12)
Requirement already satisfied: multitasking>=0.0.7 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (0.0.11)
Requirement already satisfied: pytz>=2022.5 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (2022.7.1)
Requirement already satisfied: pandas>=1.3.0 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (1.4.4)
Requirement already satisfied: html5lib>=1.1 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (1.1)
Requirement already satisfied: cryptography>=3.3.2 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (37.0.1)
Requirement already satisfied: beautifulsoup4>=4.11.1 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (4.11.1)
Requirement already satisfied: numpy>=1.16.5 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (1.21.5)
Requirement already satisfied: lxml>=4.9.1 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (4.9.1)
Requirement already satisfied: frozendict>=2.3.4 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (2.3.5)
Requirement already satisfied: requests>=2.26 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (2.28.1)
Requirement already satisfied: appdirs>=1.4.4 in c:\users\basuc\anaconda3\lib\site-packages (from yfinance) (1.4.4)
Requirement already satisfied: soupsieve>1.2 in c:\users\basuc\anaconda3\lib\site-packages (from beautifulsoup4>=4.11.1->yfinance) (2.3.1)
Requirement already satisfied: cffi>=1.12 in c:\users\basuc\anaconda3\lib\site-packages (from cryptography>=3.3.2->yfinance) (1.15.1)
Requirement already satisfied: webencodings in c:\users\basuc\anaconda3\lib\site-packages (from html5lib>=1.1->yfinance) (0.5.1)
Requirement already satisfied: six>=1.9 in c:\users\basuc\anaconda3\lib\site-packages (from html5lib>=1.1->yfinance) (1.16.0)
Requirement already satisfied: python-dateutil>=2.8.1 in c:\users\basuc\anaconda3\lib\site-packages (from pandas>=1.3.0->yfinance) (2.8.2)
Requirement already satisfied: idna<4,>=2.5 in c:\users\basuc\anaconda3\lib\site-packages (from requests>=2.26->yfinance) (3.3)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\basuc\anaconda3\lib\site-packages (from requests>=2.26->yfinance) (1.26.11)
Requirement already satisfied: charset-normalizer<3,>=2 in c:\users\basuc\anaconda3\lib\site-packages (from requests>=2.26->yfinance) (2.0.4)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\basuc\anaconda3\lib\site-packages (from requests>=2.26->yfinance) (2022.9.14)
Requirement already satisfied: pycparser in c:\users\basuc\anaconda3\lib\site-packages (from cffi>=1.12->cryptography>=3.3.2->yfinance) (2.21)
Note: you may need to restart the kernel to use updated packages.
WARNING: Ignoring invalid distribution -illow (c:\users\basuc\anaconda3\lib\site-packages)
WARNING: Ignoring invalid distribution -illow (c:\users\basuc\anaconda3\lib\site-packages)
WARNING: Ignoring invalid distribution -illow (c:\users\basuc\anaconda3\lib\site-packages)
WARNING: Ignoring invalid distribution -illow (c:\users\basuc\anaconda3\lib\site-packages)
WARNING: Ignoring invalid distribution -illow (c:\users\basuc\anaconda3\lib\site-packages)
WARNING: Ignoring invalid distribution -illow (c:\users\basuc\anaconda3\lib\site-packages)
In [2]:
#Get Apple's stock data from Yahoo finance
stock = yf.Ticker("AAPL")
data = stock.history(period="1y")
#print the dataset
print(data.head())
                                 Open        High         Low       Close  \
Date                                                                        
2022-03-01 00:00:00-05:00  163.708314  165.596883  160.994756  162.217346   
2022-03-02 00:00:00-05:00  163.400166  166.352284  161.968834  165.557098   
2022-03-03 00:00:00-05:00  167.455598  167.892951  164.553182  165.229080   
2022-03-04 00:00:00-05:00  163.499575  164.553190  161.123966  162.187515   
2022-03-07 00:00:00-05:00  162.376387  164.026396  158.082391  158.340836   

                             Volume  Dividends  Stock Splits  
Date                                                          
2022-03-01 00:00:00-05:00  83474400        0.0           0.0  
2022-03-02 00:00:00-05:00  79724800        0.0           0.0  
2022-03-03 00:00:00-05:00  76678400        0.0           0.0  
2022-03-04 00:00:00-05:00  83737200        0.0           0.0  
2022-03-07 00:00:00-05:00  96418800        0.0           0.0  
In [3]:
#Let's implement the momentum strategy in Algorithmic Trading using Python
#Calculation of Momentum
data['momentum'] = data['Close'].pct_change()

#Creating subplots to show momentum and buying/selling markers
figure = make_subplots(rows=2, cols=1)
figure.add_trace(go.Scatter(x=data.index,
                            y=data['Close'],
                         name='Close Price'))
figure.add_trace(go.Scatter(x=data.index,
                           y=data['momentum'],
                           name='Momentum',
                           yaxis='y2'))
#Adding the buy and sell signals
figure.add_trace(go.Scatter(x=data.loc[data['momentum'] > 0].index,
                            y=data.loc[data['momentum'] > 0]['Close'],
                         mode='markers', name='Buy',
                       marker=dict(color='green', symbol='triangle-up')))

figure.add_trace(go.Scatter(x=data.loc[data['momentum'] < 0].index,
                            y=data.loc[data['momentum'] < 0]['Close'],
                         mode='markers', name='Sell',
                       marker=dict(color='red', symbol='triangle-down')))

figure.update_layout(title="Algorithnic Trading using Momentum Strategy",
                    xaxis_title='Date',
                    yaxis_title='Price')

figure.update_yaxes(title="Momentum", secondary_y=True)
figure.show()
In [ ]:
#So this is how we can implement an Algorithmic Trading strategy using the momentum strategy. 
#In the above graph, the buy and sell signals are indicated by green triangle-up and
#red triangle-down markers respectively.
In [ ]:
#Summary
#Algorithmic Trading means using algorithms in buying and selling decisions in the financial market. 
#In an algorithmic trading strategy, a set of predefined rules are used to determine when to
#buy a financial instrument and when to sell it.